<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Content-Type');

// 配置项
$config = [
    'upload_dir' => __DIR__ . '/../uploads/',
    'allowed_types' => ['image/jpeg', 'image/png', 'image/gif', 'video/mp4', 'video/webm'],
    'max_size' => 10 * 1024 * 1024, // 10MB
    'base_url' => 'http://39.98.54.173:8009/AI_chat/uploads/',
    'file_lifetime' => 300 // 5分钟 = 300秒
];

// 清理过期文件
function cleanExpiredFiles($dir, $lifetime) {
    if ($handle = opendir($dir)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                $filepath = $dir . $file;
                if (is_file($filepath)) {
                    // 检查文件修改时间
                    if (time() - filemtime($filepath) > $lifetime) {
                        unlink($filepath);
                    }
                }
            }
        }
        closedir($handle);
    }
}

// 清理过期文件
cleanExpiredFiles($config['upload_dir'], $config['file_lifetime']);

// 确保上传目录存在
if (!file_exists($config['upload_dir'])) {
    mkdir($config['upload_dir'], 0755, true);
}

// 错误处理函数
function sendError($message, $code = 400) {
    http_response_code($code);
    echo json_encode(['error' => $message]);
    exit;
}

// 验证请求方法
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    sendError('只允许POST请求', 405);
}

// 检查文件上传
if (empty($_FILES['file'])) {
    sendError('没有接收到文件');
}

$file = $_FILES['file'];

// 验证文件上传错误
if ($file['error'] !== UPLOAD_ERR_OK) {
    switch ($file['error']) {
        case UPLOAD_ERR_INI_SIZE:
        case UPLOAD_ERR_FORM_SIZE:
            sendError('文件大小超过限制');
            break;
        case UPLOAD_ERR_PARTIAL:
            sendError('文件上传不完整');
            break;
        case UPLOAD_ERR_NO_FILE:
            sendError('没有文件被上传');
            break;
        default:
            sendError('文件上传失败');
    }
}

// 验证文件类型
if (!in_array($file['type'], $config['allowed_types'])) {
    sendError('不支持的文件类型');
}

// 验证文件大小
if ($file['size'] > $config['max_size']) {
    sendError('文件大小超过限制');
}

// 生成安全的文件名
$extension = pathinfo($file['name'], PATHINFO_EXTENSION);
$filename = uniqid() . '_' . time() . '.' . $extension;
$filepath = $config['upload_dir'] . $filename;

// 移动文件到目标位置
if (!move_uploaded_file($file['tmp_name'], $filepath)) {
    sendError('文件保存失败');
}

// 返回成功响应
echo json_encode([
    'success' => true,
    'message' => '文件上传成功',
    'data' => [
        'filename' => $filename,
        'url' => $config['base_url'] . $filename,
        'type' => $file['type'],
        'size' => $file['size'],
        'expires_in' => $config['file_lifetime']
    ]
]);